/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package DAO;

import Fachada.Fachada;
import LogicaNegocio.CasoServicioCliente;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;

/**
 *
 * @author GEMA
 */


public class DAOCasoServicioCliente {
    Fachada fachada;
    String reporte = " ";

    public DAOCasoServicioCliente() {
        fachada = new Fachada();
    }

    public Vector <CasoServicioCliente> consultarCasosServicioCliente()
    {
        String sql_select;
        sql_select = "SELECT * FROM CasoServicioCliente";
        Vector <CasoServicioCliente> vectorCSC = new Vector <CasoServicioCliente>();

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            ResultSet tabla = sentencia.executeQuery(sql_select);

            while(tabla.next())
            {
                CasoServicioCliente csc = new CasoServicioCliente(tabla.getString(1),tabla.getString(2),tabla.getString(3),tabla.getString(4),tabla.getString(5),tabla.getString(6),tabla.getString(7),tabla.getString(8),tabla.getString(9),tabla.getString(10));
                vectorCSC.addElement(csc);
            }
            conn.close();
            System.out.println("Conexion cerrada");
            return vectorCSC;
        }
        catch(SQLException e)
        {
            System.out.println(e);
            return null;
        }
        catch(Exception e)
        {
            System.out.println(e);
            return null;
        }
    }

    public int guardarCasoServicioCliente(CasoServicioCliente csc)
    {
        
        String sql_guardar;
        sql_guardar = "INSERT INTO CasoServicioCliente (id_csc, estado_csc, nivel_prioridad_csc, tipo_csc, descripcion_csc, fecha_inicio_csc, fecha_finalizacion_csc, calificacion_csc, id_cliente, cc_empleado) VALUES "
                      + "('"+csc.getIdCasoSC()+"' , '"+csc.getEstadoCasoSC()+"' , '"+csc.getNivelPrioridadCasoSC()+"' , '"+csc.getTipoCasoSC()+"' , '"+
                      csc.getDescripcionCasoSC()+"' , '"+csc.getFechaInicioCasoSC()+"' , '"+csc.getFechaFinalizacionCasoSC()+"' , '"+csc.getCalificacionCasoSC()+"' , '"+csc.getIdCliente()+"' , '"+csc.getCcEmpleado()+"')";

        try {
            Connection conexion= fachada.ConexionBaseDatos();
            Statement sentencia=conexion.createStatement();
            int numFilas= sentencia.executeUpdate(sql_guardar);
            conexion.close();
            return numFilas;
        }
        catch(SQLException e) {
            System.out.println(e.toString());
        }
        catch(Exception e) {
            System.out.println(e.toString());
        }
        return -1;
    }

    public int modificarEstadoCSC(CasoServicioCliente csc)
    {
        String sql_modificar;
        sql_modificar = "UPDATE CasoServicioCliente "+
                        "SET  estado_csc = '" + csc.getEstadoCasoSC() + "' " +
                        "WHERE id_csc = '" + csc.getIdCasoSC() + "'";

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            int numFilas = sentencia.executeUpdate(sql_modificar);
            conn.close();
            return numFilas;
        }
        catch(SQLException e){System.out.println(e); }
        catch(Exception e){System.out.println(e); }
        return -1;
    }

    public int modificarNivelPrioridadCSC(CasoServicioCliente csc)
    {
        String sql_modificar;
        sql_modificar = "UPDATE CasoServicioCliente "+
                        "SET  nivel_prioridad_csc = '" + csc.getNivelPrioridadCasoSC()+ "' " +
                        "WHERE id_csc = '" + csc.getIdCasoSC() + "'";

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            int numFilas = sentencia.executeUpdate(sql_modificar);
            conn.close();
            return numFilas;
        }
        catch(SQLException e){System.out.println(e); }
        catch(Exception e){System.out.println(e); }
        return -1;
    }

    public int modificarTipoCSC(CasoServicioCliente csc)
    {
        String sql_modificar;
        sql_modificar = "UPDATE CasoServicioCliente "+
                        "SET  tipo_csc = '" + csc.getTipoCasoSC() + "' " +
                        "WHERE id_csc = '" + csc.getIdCasoSC() + "'";

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            int numFilas = sentencia.executeUpdate(sql_modificar);
            conn.close();
            return numFilas;
        }
        catch(SQLException e){System.out.println(e); }
        catch(Exception e){System.out.println(e); }
        return -1;
    }

    public int modificarDescripcionCSC(CasoServicioCliente csc)
    {
        String sql_modificar;
        sql_modificar = "UPDATE CasoServicioCliente "+
                        "SET  descripcion_csc = '" + csc.getDescripcionCasoSC() + "' " +
                        "WHERE id_csc = '" + csc.getIdCasoSC() + "'";

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            int numFilas = sentencia.executeUpdate(sql_modificar);
            conn.close();
            return numFilas;
        }
        catch(SQLException e){System.out.println(e); }
        catch(Exception e){System.out.println(e); }
        return -1;
    }

     public int modificarFechaInicioCSC(CasoServicioCliente csc)
    {
        String sql_modificar;
        sql_modificar = "UPDATE CasoServicioCliente "+
                        "SET  fecha_inicio_csc = '" + csc.getFechaInicioCasoSC() + "' " +
                        "WHERE id_csc = '" + csc.getIdCasoSC() + "'";

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            int numFilas = sentencia.executeUpdate(sql_modificar);
            conn.close();
            return numFilas;
        }
        catch(SQLException e){System.out.println(e); }
        catch(Exception e){System.out.println(e); }
        return -1;
    }

    public int modificarFechaFinalizacionCSC(CasoServicioCliente csc)
    {
        String sql_modificar;
        sql_modificar = "UPDATE CasoServicioCliente "+
                        "SET  fecha_finalizacion_csc = '" + csc.getFechaFinalizacionCasoSC() + "' " +
                        "WHERE id_csc = '" + csc.getIdCasoSC() + "'";

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            int numFilas = sentencia.executeUpdate(sql_modificar);
            conn.close();
            return numFilas;
        }
        catch(SQLException e){System.out.println(e); }
        catch(Exception e){System.out.println(e); }
        return -1;
    }

    public int modificarCalificacionCSC(CasoServicioCliente csc)
    {
        String sql_modificar;
        sql_modificar = "UPDATE CasoServicioCliente "+
                        "SET  calificacion_csc = '" + csc.getCalificacionCasoSC() + "' " +
                        "WHERE id_csc = '" + csc.getIdCasoSC() + "'";

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            int numFilas = sentencia.executeUpdate(sql_modificar);
            conn.close();
            return numFilas;
        }
        catch(SQLException e){System.out.println(e); }
        catch(Exception e){System.out.println(e); }
        return -1;
    }

    public int modificarClienteCSC(CasoServicioCliente csc)
    {
        String sql_modificar;
        sql_modificar = "UPDATE CasoServicioCliente "+
                        "SET  id_cliente = '" + csc.getIdCliente() + "' " +
                        "WHERE id_csc = '" + csc.getIdCasoSC() + "'";

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            int numFilas = sentencia.executeUpdate(sql_modificar);
            conn.close();
            return numFilas;
        }
        catch(SQLException e){System.out.println(e); }
        catch(Exception e){System.out.println(e); }
        return -1;
    }

    public int modificarEmpleadoCSC(CasoServicioCliente csc)
    {
        String sql_modificar;
        sql_modificar = "UPDATE CasoServicioCliente "+
                        "SET  cc_empleado = '" + csc.getCcEmpleado() + "' " +
                        "WHERE id_csc = '" + csc.getIdCasoSC() + "'";

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            int numFilas = sentencia.executeUpdate(sql_modificar);
            conn.close();
            return numFilas;
        }
        catch(SQLException e){System.out.println(e); }
        catch(Exception e){System.out.println(e); }
        return -1;
    }

    public int eliminarCSC(String idCSC)
    {
        String sql_modificar;
        sql_modificar = "DELETE FROM CasoServicioCliente "+
                        "WHERE id_csc = " + "'" +idCSC + "'";

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            int numFilas = sentencia.executeUpdate(sql_modificar);
            conn.close();
            return numFilas;
        }
        catch(SQLException e){System.out.println(e); }
        catch(Exception e){System.out.println(e); }
        return -1;
    }

    public Vector <Vector> casosPendientes(String idEmpleado)
    {
        String sql_select;
        sql_select = "SELECT id_csc, estado_csc, nivel_prioridad_csc, tipo_csc, descripcion_csc, fecha_inicio_csc, fecha_finalizacion_csc, id_cliente, nombre_cliente " +
                     "FROM CasoServicioCliente NATURAL JOIN Cliente " +
                     "WHERE (estado_csc='Iniciado' OR estado_csc='En proceso' OR estado_csc='No Resuelto') AND (cc_empleado = '" + idEmpleado + "') " +
                     "ORDER BY nivel_prioridad_csc";
        Vector <Vector> vectorCSC = new Vector <Vector>();

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            ResultSet tabla = sentencia.executeQuery(sql_select);

            while(tabla.next())
            {
                Vector <String> trazabilidad = new Vector <String>();
                trazabilidad.addElement(tabla.getString(1));
                trazabilidad.addElement(tabla.getString(2));
                trazabilidad.addElement(tabla.getString(3));
                trazabilidad.addElement(tabla.getString(4));
                trazabilidad.addElement(tabla.getString(5));
                trazabilidad.addElement(tabla.getString(6));
                trazabilidad.addElement(tabla.getString(7));
                vectorCSC.addElement(trazabilidad);
            }
            conn.close();
            System.out.println("Conexion cerrada");
            return vectorCSC;
        }
        catch(SQLException e)
        {
            System.out.println(e);
            return null;
        }
        catch(Exception e)
        {
            System.out.println(e);
            return null;
        }
    }

    public Vector <Vector> descripcionCSC()
    {
        String sql_select;
        sql_select = "SELECT id_csc, descripcion_csc " +
                     "FROM CasoServicioCliente";
        Vector <Vector> vectorCSC = new Vector <Vector>();

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            ResultSet tabla = sentencia.executeQuery(sql_select);

            while(tabla.next())
            {
                Vector <String> descripcion = new Vector <String>();
                descripcion.addElement(tabla.getString(1));
                descripcion.addElement(tabla.getString(2));

                vectorCSC.addElement(descripcion);
            }
            conn.close();
            System.out.println("Conexion cerrada");
            return vectorCSC;
        }
        catch(SQLException e)
        {
            System.out.println(e);
            return null;
        }
        catch(Exception e)
        {
            System.out.println(e);
            return null;
        }
    }

    public Vector <Vector> reporteCSC( Vector <String> columnas, String fechaInicial, String fechaFinal, Vector <String> atributos, Vector <String> valores)
    {
        String sql_select;
        sql_select = "SELECT id_csc, descripcion_csc, ";

        for(int i = 0; i<columnas.size(); i++)
        {
            sql_select += columnas.elementAt(i).toString() + ", ";
        }

        sql_select += "fecha_finalizacion_csc - fecha_inicio_csc AS duracion ";
        sql_select+="FROM CasoServicioCliente NATURAL JOIN Empleado WHERE ";
        sql_select+="fecha_inicio_csc BETWEEN '"+fechaInicial+"' AND '"+fechaFinal+"' ";

        for(int i=0; i<atributos.size(); i++)
        {
            sql_select+="AND "+atributos.elementAt(i).toString()+" = '"+valores.elementAt(i).toString()+"' ";
        }

        System.out.println(sql_select);
        reporte = sql_select;
        
        Vector <Vector> vectorCSC = new Vector <Vector>();

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            ResultSet tabla = sentencia.executeQuery(sql_select);

            while(tabla.next())
            {
                Vector <String> descripcion = new Vector <String>();

                for(int i=1; i<=columnas.size()+3; i++)
                {
                    descripcion.addElement(tabla.getString(i));
                }

                vectorCSC.addElement(descripcion);
            }
            conn.close();
            System.out.println("Conexion cerrada");
            return vectorCSC;
        }
        catch(SQLException e)
        {
            System.out.println(e);
            return null;
        }
        catch(Exception e)
        {
            System.out.println(e);
            return null;
        }
    }

    public Vector <Vector> estadisticasCSC()
    {
        String sql_select;
        sql_select = "SELECT COUNT(*), AVG(duracion) FROM ("+reporte+")";
        
        Vector <Vector> vectorCSC = new Vector <Vector>();

        try
        {
            Connection conn = fachada.ConexionBaseDatos();
            Statement sentencia = conn.createStatement();
            ResultSet tabla = sentencia.executeQuery(sql_select);

            while(tabla.next())
            {
                Vector <String> descripcion = new Vector <String>();
                descripcion.addElement(tabla.getString(1));
                descripcion.addElement(tabla.getString(2));
   
                vectorCSC.addElement(descripcion);
            }
            conn.close();
            System.out.println("Conexion cerrada");
            return vectorCSC;
        }
        catch(SQLException e)
        {
            System.out.println(e);
            return null;
        }
        catch(Exception e)
        {
            System.out.println(e);
            return null;
        }
    }

}
